# coding=utf-8
"""
    路由模块

    这里是动态注册蓝图

    需要遵守 :
        1. routes 包下均为包, 也就是每个路由必须在 routes 包下的包内定义;
        2. routes 包下的包中, 需要在 __init__.py 中定义路由;
        3. __init__.py 中定义路由时, 路由名需要为 bp;
        4. 一般, 定义蓝图时, 需指定 url_prefix 参数;
        5. __init__.py 中请使用延迟导包;
"""
import importlib
import os


# @Time    :  2024-10-16 17:28:40
# @Author  :  jiangtong
# @Email   :  gingerqgyy@outlook.com
# @Project :  ginger_yl_test_boost
# @File    :  __init__.py


# 动态注册蓝图 :
def register_blueprints(_app):
    """
    动态注册 routes 目录下的所有蓝图
    只扫描每个子目录中的 __init__.py 文件
    """
    routes_dir = os.path.join(_app.root_path, 'routes')
    for module_name in os.listdir(routes_dir):
        module_path = os.path.join(routes_dir, module_name)

        # 只处理目录，并且目录中必须有 __init__.py
        if os.path.isdir(module_path) and '__init__.py' in os.listdir(module_path):
            module_full_name = f'routes.{module_name}'

            # 动态导入子目录中的 __init__.py
            module = importlib.import_module(f'{module_full_name}')

            # 检查是否有名为 'bp' 的蓝图对象
            if hasattr(module, 'bp'):
                _app.register_blueprint(module.bp)
